home *** CD-ROM | disk | FTP | other *** search
/ PC Answers 2002 January / PC Answers January 2002.7z / PC Answers January 2002.bin / graphics / freepixl / _SETUP.1 / Profile.pxl < prev    next >
Text File  |  2001-05-08  |  6KB  |  221 lines

  1. {    Sample PiXCL 4.4 source file. Can be freely copied or adapted. }
  2. Initialize:
  3.      UseCoordinates(PIXEL)
  4.     UseFont("Arial",5,15,NOBOLD,NOITALIC,NOUNDERLINE,0,0,255)
  5.  
  6.     SetColorPalette(GENERATE)
  7.     Title$ = "Profiling Pixel Values and Histograms"
  8.     UseCaption(Title$)
  9.     WinLocate(Title$,200,100,760,550,Res) 
  10.     WinShow(Title$,TOPMOST,Res)
  11.     DirGet(SourceDir$)
  12.     SampleBitmap$ = "..\samples\geol.bmp"
  13.     State = 0
  14.     UseBrush(SOLID,128,128,128)
  15.  
  16.     InfoMenu(REMOVE)
  17.     SetMenu("File",IGNORE,
  18.         "E&xit",Leave,
  19.         ENDPOPUP,
  20.         "&Help",Help,
  21.         ENDPOPUP,
  22.         "&About",About,
  23.         ENDPOPUP)
  24.     DrawText(100,90,"Click anywhere to start")
  25.     SetMouse(0,40,400,410,Profile,X,Y)
  26.     StatusWindow(ENABLE,BOTTOM,3,180,300,-1,0)
  27.     Toolbar(RAISED, PXL_LARGE,
  28.         HISTOGRAM,ENABLED,CHECK,"Toggle Channel Histograms",CreateHistograms, 
  29.         HELPINFO,ENABLED,STD,"Show Help",Help, 
  30.         NULL,NULL,SEPARATOR,"",Dummy,
  31.         PXL_PRINT,ENABLED,STD,"Print Client Area scaled to page",PrintClientArea,
  32.         NULL,NULL,SEPARATOR,"",Dummy,
  33.         IMAGEINFO,ENABLED,STD,"About Profiling",About)
  34.     
  35.     ChangeToolbarBtn("",1,DISABLED,Res)
  36.     ChangeToolbarBtn("",4,DISABLED,Res)
  37.  
  38. Wait_for_Input:
  39. Dummy:
  40.     GoSub UpdateTime
  41.     WaitInput(10000)
  42.     Goto Wait_for_Input
  43.  
  44. Leave:
  45.     End
  46.  
  47. About:
  48.     AboutUser("About Profile","PiXCL Sample program","")
  49.     Goto Wait_for_Input
  50.  
  51. PrintClientArea:
  52.     {identify the current client area, save the bitmap in a temp 
  53.      file, then print the bitmap and delete the temp file}
  54.     TempFile$ = SourceDir$ + "\clientimage.bmp"
  55.     WinGetClientRect("",cx1,cy1,cx2,cy2)  
  56.     cy1 += 32   cy2 -= 28   {ignore the toolbar and statusbar regions}
  57.     SaveRectangle(cx1,cy1,cx2,cy2, TempFile$, BACKGND,Res)
  58.     PrintBitmap(TempFile$,PRINT_PAGERES,Res)
  59.     FileDelete(TempFile$,Res)
  60.     Goto Wait_for_Input
  61.  
  62. CreateHistograms:
  63.     WaitInput(100)
  64.     If State = 0 
  65.         State = 1
  66.         {have to convert to 24 bit color space to show channel histograms}
  67.         DrawBitMap(0,40,SampleBitmap$ ){400x324}
  68.         ConvertColorSpace(RGB24,NONE,Res)
  69.         GetChannel(RED,RedHandle)
  70.         GetChannel(GREEN,GreenHandle)
  71.         GetChannel(BLUE,BlueHandle)
  72.  
  73.         {now create the histograms}
  74.         Histogram(530,100,POPUP, SampleBitmap$,RedHandle,NONCUM,"Red",Histogram1,
  75.              530,260,POPUP, SampleBitmap$,GreenHandle,NONCUM,"Green",Histogram2,
  76.               530,420,POPUP, SampleBitmap$, BlueHandle,NONCUM,"Blue", Histogram3)
  77.         WinSetActive(Title$,Res)
  78.     Else
  79.         State = 0
  80.         Histogram()
  81.     Endif
  82.     Goto Wait_for_Input
  83.  
  84. Profile:
  85.     UseBackground(TRANSPARENT,166,166,166)
  86.     DrawBackGround
  87.     SetMouse(0,40,400,410,Start,X,Y)
  88.     SetRightMouse()
  89.     
  90. Start:
  91.     GoSub UpdateStatusDisplay
  92.     ChangeToolbarBtn("",1,ENABLED,Res)
  93.     ChangeToolbarBtn("",4,ENABLED,Res)
  94.     WaitInput(1) 
  95.     SetColorPalette(GENERATE)
  96.     DrawBitMap(0,40,SampleBitmap$){400x324}
  97.     WaitInput(1)  {let windows catch up}
  98.     DrawStatusWinText(0,SampleBitmap$)
  99.     UseCaption(Title$)
  100.     UsePen(NULL,1,0,0,0)
  101.     UseBrush(SOLID,255,255,255)
  102.  
  103.     DrawEdgeRectangle(400,40,420,364,RAISEDEDGE,ADJUST,LEFT)
  104.  
  105.     DrawEdgeRectangle(408,41,542,126,SUNKENEDGE,ADJUST,RECT)
  106.     DrawEdgeRectangle(408,129,542,214,SUNKENEDGE,ADJUST,RECT)
  107.     DrawEdgeRectangle(408,219,542,304,SUNKENEDGE,ADJUST,RECT)
  108.  
  109.     DrawRectangle(410,43,540,124)
  110.     DrawRectangle(410,131,540,212)
  111.     DrawRectangle(410,221,540,302)
  112.  
  113.     X = 0
  114.     Xg = 411
  115.     MaxR = 0 MinR = 255
  116.     MaxG = 0 MinG = 255
  117.     MaxB = 0 MinB = 255
  118.     UseCursor(WAIT)
  119. Loop:
  120.     GetPixel(X,Y,R,G,B,Res)
  121.     If R > MaxR Then MaxR = R
  122.     If G > MaxG Then MaxG = G
  123.     If B > MaxB Then MaxB = B
  124.  
  125.     If R < MinR Then MinR = R
  126.     If G < MinG Then MinG = G
  127.     If B < MinB Then MinB = B
  128.     X = X + 2
  129.     Xg = Xg + 1
  130.     R = R / 4   G = G / 4   B = B / 4
  131.     UsePen(SOLID,1,0,0,255) Y1 = 123 - B
  132.     DrawLine(Xg,123,Xg,Y1)
  133.  
  134.     UsePen(SOLID,1,0,128,0) Y2 = 211 - G
  135.     DrawLine(Xg,211,Xg,Y2)
  136.  
  137.     UsePen(SOLID,1,255,0,0) Y3 =301 - R
  138.     DrawLine(Xg,301,Xg,Y3)
  139.     If X < 252 Then Goto Loop
  140.     
  141.     DrawNumber(440,44,MinB) DrawNumber(480,44,MaxB)
  142.     DrawNumber(440,132,MinG) DrawNumber(480,132,MaxG)
  143.     DrawNumber(440,222,MinR) DrawNumber(480,222,MaxR)
  144.  
  145.     UsePen(SOLID,1,255,255,255)
  146.     DrawLine(0,Y,400,Y)
  147.  
  148.     UseCursor(ARROW)
  149.     SetRightMouse(410,42,540,124,BluProfile,Xx,Yy,
  150.                    410,130,540,212,GrnProfile,Xx,Yy,
  151.                       410,220,540,302,RedProfile,Xx,Yy)
  152.  
  153.     Goto Wait_for_Input
  154.  
  155.  
  156. Help:
  157.     MessageBox(OK,1,INFORMATION,
  158. "To run this sample program, click anywhere in the window,
  159. and an image is displayed. The line at the X coordinate 
  160. that you clicked is scanned for the display RGB pixel 
  161. values, and three profiles are drawn to the right of the 
  162. image, plus the minimum and maximum values for each color
  163. in the scanned line.
  164.  
  165. The Histogram button toggles the display of the individual 
  166. Red, Green and Blue histograms. The Print button captures 
  167. the current client area and sends it to a selected printer, 
  168. scaled to the current page size.
  169.  
  170. Both are disabled at the start of the program, and enabled 
  171. when the sample image is loaded.
  172.  
  173. This program is best viewed with a 2MB or better video card 
  174. with 16 or 24 bit color mode enabled.",
  175.     "Profiling Pixel values",Res)
  176.  
  177.     Goto Wait_for_Input
  178.  
  179. RedProfile:
  180.     MessageBox(OK,1,EXCLAMATION,
  181. "These are the pixel values read from the display
  182. memory, not from the image file itself.",
  183.     "Profile of the Red pixels.",Res)
  184.     Goto Wait_for_Input
  185.  
  186. GrnProfile:
  187.     MessageBox(OK,1,EXCLAMATION,
  188. "These are the pixel values read from the display
  189. memory, not from the image file itself.",
  190.     "Profile of the Green pixels.",Res)
  191.     Goto Wait_for_Input
  192.  
  193. BluProfile:
  194.     MessageBox(OK,1,EXCLAMATION,
  195. "These are the pixel values read from the display
  196. memory, not from the image file itself.",
  197.     "Profile of the Blue pixels.",Res)
  198.     Goto Wait_for_Input
  199.  
  200. UpdateStatusDisplay:
  201.     Str(X,X$) X$ = X$ + ","  Str(Y,Y$) Y$ = Y$ + " selected."
  202.     Msg$ = X$ + Y$
  203.     DrawStatusWinText(1,Msg$)    
  204.     Return
  205.  
  206. UpdateTime:
  207.     TimeToASCII(LOCAL,WDDDMYYYY,Date$)
  208.     AppWindowHandle(Handle,Handle$, geoPiXCLFlag,PXLMajor,Minor)
  209.     If PXLMajor = 5
  210.         GetLocalTime(n,n,n,n,Hour,Minimum,Sec)
  211.     Else
  212.         GetLocalTime(n,n,n,n,Hour,Minimum)
  213.     Endif
  214.     Str(Hour,Hour$)   Hour$ = Hour$ + ":"   
  215.     Str(Minimum,Minimum$)
  216.     If Minimum < 10 Then Minimum$ = "0" + Minimum$
  217.     Minimum$ = Minimum$ + "  "
  218.     TimeString$ = Hour$ + Minimum$
  219.     TimeString$ = TimeString$ + Date$
  220.     DrawStatusWinText(2,TimeString$)  
  221.     Return